package April.three;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Iterator;

public class IteratorDemo {
    /*
    迭代器就是用来 用一种方式取出不同数组中的元素的
      其实就是遍历
      接口 iterator:两个抽象方法
      boolean hasNext() 判断集合中还有没有可以取出的元素，如果有，返回true
      next（）取出集合中的下一个元素

      Iterator接口，找实现类
      Collection接口定义方法
        Iterator iterator()
        ArrayList 重写方法 iteartor（）  返回了Iterator接口的实现类的对象
        所以用Iterator接收 该方法返回的对象 再用该对象调用hasNext 和next方法
     */
    public static void main(String[] args){
        function_1();
    }

    public static void function_1(){
//        创建一个集合 ArrayList
        ArrayList<String> arry = new ArrayList<String>();
        arry.add("001");
        arry.add("002");
        arry.add("003");
        arry.add("004");
//        用集合的对象调用集合的方法 iterator() 返回Iterator的实现类的对象
        Iterator<String> it = arry.iterator();
        boolean b = it.hasNext();
        System.out.println(b);
        String s = it.next();
        System.out.println(s);
/*
因为每次只能去一个 所以如果全部 取出 是一个循环的过程 因为不知道循环多少次
所以建议利用while循环

 */
        while(it.hasNext()){
//            在while中，hasNext做判断条件 在循环体内必须有一个next（）方法，不然就是死循环
//            因为hasNext是判断下一个元素有没有，而next是使指针向后移动一位
            System.out.println(it.next());
//            理论上 迭代器循环一次后指针停在最后一位上，无法再回去
        }
        /*
        利用for循环来实现以下遍历
        优点是 可以在for循环里面建立迭代器，更节约内存。而while循环是在main方法中建立的，main方法不结束
        迭代器就不结束
        但是相比来讲 while更加简洁 用的较多。
         */

        for (Iterator<String> it1 = arry.iterator();it1.hasNext();  ) {
            System.out.println(it1.next());
        }
    }

}
